package test.yzx.pproject.act3;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import java.util.List;

public class GSONActivity   extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }


    public static void main(String[] args){
        GsonBuilder builder = new GsonBuilder();

        //不导出实体中没有用@Expose注解的属性
        builder.excludeFieldsWithoutExposeAnnotation();

        //支持Map的key为复杂对象的形式
        builder.enableComplexMapKeySerialization();

        //时间转化为特定格式
        builder.setDateFormat("yyyy-MM-dd HH:mm:ss:SSS");

        //
        builder.serializeNulls();

        //会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.
        //builder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);

        //对json结果格式化.
        //builder.setPrettyPrinting();

        //有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.
        //@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么
        //@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.
        builder.setVersion(1.0);

        Gson gson = builder.create();

//        Person p = new Person();
//        p.name = "yzx";
//        p.age = "99";
//        String json = gson.toJson(p);

        String json = "[{\"name\":\"yzx\",\"personAge\":\"99\"},{\"name\":\"yzx\",\"personAge\":\"106\"}]";

        List<Person> list = gson.fromJson(json, new TypeToken<List<Person>>() {}.getType());
        System.out.println(list.get(1).age);

    }


    public static class Person{
        //只有标记 @Expose 的字段才会被转化, 不论json到obj还是obj到json
        @Expose
        public String name;

        @Expose
        //对应的json的字段是personAge
        @SerializedName("personAge")
        public String age;
    }

}
